
/* 
  第11节：ES6中对象
    对象对于Javascript是非常重要的。在ES6中对象有了很多新特性，

  --------------------------------------------------------------------------------------------------------
  
  对象赋值
    ES6允许把声明的变量直接赋值给对象，我们看下面的例子。
  
  let name="jspang";
  let skill= 'web';
  var obj= {name,skill};
  console.log(obj);  //Object {name: "jspang", skill: "web"}  

  --------------------------------------------------------------------------------------------------------

  对象Key值构建
    有时候我们会在后台取出key值，而不是我们前台定义好的，这时候我们如何构建我们的key值那。比如我们在后台取了一个key值，然后可以用[ ] 的形式，进行对象的构建。
    key值:指的是key  而不是vue值, 别理解错了

  let key='skill';
  var obj={
      [key]:'web'
  }
  console.log(obj.skill);  

  --------------------------------------------------------------------------------------------------------
  
  自定义对象方法
    对象方法就是把对象中的属性，用匿名函数的形式编程方法。这个在以前就有应用，我们这里只是简单的复习一下。

  var obj={
    add:function(a,b){
        return a+b;
    }
  }
  console.log(obj.add(1,2));  //3  

  --------------------------------------------------------------------------------------------------------

  Object.is(  ) 对象比较
    对象的比较方法,以前进行对象值的比较，经常使用===来判断，比如下面的代码：

  var obj1 = {name:'jspang'};
  var obj2 = {name:'jspang'};
  console.log(obj1.name === obj2.name);//true  


  那ES6为我们提供了is方法进行对比。
  
  var obj1 = {name:'jspang'};
  var obj2 = {name:'jspang'};
  console.log(obj1.name === obj2.name);//true
  console.log(Object.is(obj1.name,obj2.name)); //true


  区分=== 和 is方法的区别是什么，看下面的代码输出结果。

  console.log(+0 === -0);  //true
  console.log(NaN === NaN ); //false
  console.log(Object.is(+0,-0)); //false
  console.log(Object.is(NaN,NaN)); //true

  这太诡异了，我要怎么记忆，那技术胖在这里告诉你一个小妙招，===为同值相等，is()为严格相等。


  --------------------------------------------------------------------------------------------------------
  
  操作数组时我们经常使用数组合并，那对象也有合并方法，那就是assgin(  )。看一下啊具体的用法。

  var a={a:'jspang'};
  var b={b:'技术胖'};
  var c={c:'web'};
  
  let d=Object.assign(a,b,c)
  console.log(d);

  记得学完了练习一下啊，因为基础知识的点是非常杂的，你不练习很快就忘记了。


*/

// 对象赋值  -->这个可以,好用
let name='wenfei';
let skill='zwf';
let obj={name,skill};
// console.log(obj);  //{name: "wenfei", skill: "zwf"}


// 对象Key值构建   --> 目前想不到应用场景,比如后台拿回来的对象 ,可以为这个对象遍历键,但是值怎么处理,之前表单的值都已经有对应的键值,键和这个键不一样,无法遍历一一对应值
let key='userName';
let obj1={
  [key]:'用户名'
}
// console.log(obj1.userName);  //用户名

// 自定义对象方法
let obj2={
  add:(a,b)=>{
    return a+b;
  }
}
// console.log(obj2.add(1,2));//3

// Object.is(  ) 对象比较
let obj3={
  name:'zwf'
}
let obj4={
  name:'zwf'
}
// === 比较值和类型
// Object.is  //比较的也是值和类型
console.log(obj3===obj4);  //false   值存在内存的栈里面, 地址不一样
console.log(obj3.name===obj4.name); //true  值一样  类型都是字符串
console.log(Object.is(obj3,obj4)); //false   值存在内存的栈里面, 地址不一样
console.log(Object.is(obj3.name,obj4.name));// true  值一样,类型一样

console.log(+0 === -0);  //true  // 
console.log(NaN === NaN ); //false
console.log(Object.is(+0,-0)); //false  //  这个和上面结论违背, 所以说0 除外 ,这样就说通 了 
console.log(Object.is(NaN,NaN)); //true  NaN就是特殊情况

// Object.assign(  )合并对象
let a={a:'z'};
let b={b:'w'};
let c={c:'f'};
let d=Object.assign(a,b,c);
console.log(d);  //{a: "z", b: "w", c: "f"}